(x_create_bitmap_from_data): Initialize have_mask member to 0.
authorKenichi Handa <handa@m17n.org>
Thu, 31 Jul 2003 00:52:00 +0000 (00:52 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 31 Jul 2003 00:52:00 +0000 (00:52 +0000)
(x_create_bitmap_from_file): Likewise.
(x_destroy_bitmap): Check have_mask member before freeing a mask.
(x_destroy_all_bitmaps): Likewise.
(x_create_bitmap_mask): Set have_mask member to 1.

src/xfns.c

index 4ce7dec41d7227ccb1d23360a950e087d7396128..b567b11d28328dc7537579c723a7cfd2342b408c 100644 (file)
@@ -623,6 +623,7 @@ x_create_bitmap_from_data (f, bits, width, height)
 
   id = x_allocate_bitmap_record (f);
   dpyinfo->bitmaps[id - 1].pixmap = bitmap;
+  dpyinfo->bitmaps[id - 1].have_mask = 0;
   dpyinfo->bitmaps[id - 1].file = NULL;
   dpyinfo->bitmaps[id - 1].refcount = 1;
   dpyinfo->bitmaps[id - 1].depth = 1;
@@ -674,6 +675,7 @@ x_create_bitmap_from_file (f, file)
 
   id = x_allocate_bitmap_record (f);
   dpyinfo->bitmaps[id - 1].pixmap = bitmap;
+  dpyinfo->bitmaps[id - 1].have_mask = 0;
   dpyinfo->bitmaps[id - 1].refcount = 1;
   dpyinfo->bitmaps[id - 1].file
     = (char *) xmalloc (SBYTES (file) + 1);
@@ -701,7 +703,8 @@ x_destroy_bitmap (f, id)
        {
          BLOCK_INPUT;
          XFreePixmap (FRAME_X_DISPLAY (f), dpyinfo->bitmaps[id - 1].pixmap);
-         XFreePixmap (FRAME_X_DISPLAY (f), dpyinfo->bitmaps[id - 1].mask);
+         if (dpyinfo->bitmaps[id - 1].have_mask)
+           XFreePixmap (FRAME_X_DISPLAY (f), dpyinfo->bitmaps[id - 1].mask);
          if (dpyinfo->bitmaps[id - 1].file)
            {
              xfree (dpyinfo->bitmaps[id - 1].file);
@@ -723,7 +726,8 @@ x_destroy_all_bitmaps (dpyinfo)
     if (dpyinfo->bitmaps[i].refcount > 0)
       {
        XFreePixmap (dpyinfo->display, dpyinfo->bitmaps[i].pixmap);
-       XFreePixmap (dpyinfo->display, dpyinfo->bitmaps[i].mask);
+       if (dpyinfo->bitmaps[i].have_mask)
+         XFreePixmap (dpyinfo->display, dpyinfo->bitmaps[i].mask);
        if (dpyinfo->bitmaps[i].file)
          xfree (dpyinfo->bitmaps[i].file);
       }
@@ -822,6 +826,7 @@ x_create_bitmap_mask(f, id)
             width, height);
   XFreeGC (FRAME_X_DISPLAY (f), gc);
 
+  dpyinfo->bitmaps[id - 1].have_mask = 1;
   dpyinfo->bitmaps[id - 1].mask = mask;
 
   XDestroyImage (ximg);